﻿''Creado por: Manuel Chaves el 13/6/10
''Esta clase sirve como un puente entre los objetos de tipo Puesto y la base de datos

Public Class MultiPuesto
#Region "chaves"
    ''' <summary>
    ''' Registra un nuevo puesto en la base de datos
    ''' </summary>
    ''' <param name="p_descripcion">Descripcion</param>
    ''' <param name="p_nombre">Nombre</param>
    ''' <param name="p_nivel">Nivel</param>
    ''' <param name="p_salario">Salario</param>
    ''' <remarks>Creado por: Manuel Chaves inicio:14/6/2010 mod:22/06/210</remarks>
    Public Shared Sub crear(ByVal p_nombre As String, ByVal p_descripcion As String, _
            ByVal p_nivel As Integer, ByVal p_tipoSalario As Integer, ByVal p_salario As Double)
        '
        Dim pars(4) As AccesoDatos.Parametro
        '
        Dim sql As String = "INSERT INTO t_puesto (nombre, descripcion, codigo_nivel, tipo_salario, salario)" _
                          & "VALUES (p_nombre, p_descripcion, p_nivel, p_tipo_salario, p_salario)"
        pars(0) = New AccesoDatos.Parametro("p_nombre", p_nombre)
        pars(1) = New AccesoDatos.Parametro("p_descripcion", p_descripcion)
        pars(2) = New AccesoDatos.Parametro("p_nivel", p_nivel)
        pars(3) = New AccesoDatos.Parametro("p_tipo_salario", p_tipoSalario)
        pars(4) = New AccesoDatos.Parametro("p_salario", p_salario)
        '
        Try
            g_access.ejecutarSQL(sql, pars)
        Catch ex As Exception
            MsgBox("MultiPuesto -> crear : " + ex.Message)
            Throw ex
        End Try
    End Sub

    ''' <summary>
    ''' Arma un objeto nivel a partir de los datos en la base de datos.
    ''' </summary>
    ''' <param name="p_codigo">Codigo del puesto</param>
    ''' <remarks>Creado por: Manuel Chaves inicio:14/6/2010 mod:22/06/210</remarks>
    Public Shared Function obtener(ByVal p_codigo As Integer) As Puesto
        Dim dr As IDataReader
        Dim pars(0) As AccesoDatos.Parametro
        Dim objPuesto As Puesto
        '
        Dim sql As String = "SELECT * FROM t_puesto WHERE codigo = p_codigo AND eliminado = 0"
        pars(0) = New AccesoDatos.Parametro("p_codigo", p_codigo)
        '
        Try
            dr = g_access.ejecutarQuery(sql, pars)
            If dr.Read Then
                objPuesto = instanciarPuesto(dr)
            End If
        Catch ex As Exception
            MsgBox("obtener en multiPuesto: " + ex.Message)
        End Try
        Return objPuesto
    End Function

    ''' <summary>
    ''' Instancia un puesto.
    ''' </summary>
    ''' <param name="p_dr">IDataReader con los datos de un puesto</param>
    ''' <remarks>Creado por: Manuel Chaves inicio:14/6/2010 mod:22/06/210</remarks>
    Private Shared Function instanciarPuesto(ByVal p_dr As IDataReader) As Puesto
        Dim codigo As Integer = p_dr.Item("codigo")
        Dim nombre As String = p_dr.Item("nombre")
        Dim descripcion As String = p_dr.Item("descripcion")
        Dim nivel As String = p_dr.Item("codigo_nivel")
        Dim tipoSalario As Integer = p_dr.Item("tipo_salario")
        Dim salario As Double = p_dr.Item("salario")
        Dim objPuesto = New Puesto(codigo, nombre, descripcion, nivel, tipoSalario, salario)
        Return objPuesto
    End Function

    ''' <summary>
    ''' Devuelve un IDataReader con todos los puestos en la base de datos
    ''' </summary>
    ''' <remarks>Creado por: Manuel Chaves inicio:14/6/2010 mod:22/06/210</remarks>
    Public Shared Function listarDR() As IDataReader
        Dim dr As IDataReader
        Dim pars(0) As AccesoDatos.Parametro
        '
        Dim sql As String = "SELECT * FROM t_puesto WHERE eliminado = p_eliminado"
        pars(0) = New AccesoDatos.Parametro("p_eliminado", 0)
        '
        Try
            dr = g_access.ejecutarQuery(sql, pars)
        Catch ex As Exception
        End Try
        Return dr
    End Function

    ''' <summary>
    ''' Lista los puestos de un nivel especifico.
    ''' </summary>
    ''' <param name="p_codigo">Codigo del nivel</param>
    ''' <remarks>Creado por: Manuel Chaves inicio:14/6/2010 mod:22/06/210</remarks>
    Public Shared Function listarPuestosPorCodigoNivel(ByVal p_codigo) As IDataReader
        Dim dr As IDataReader
        Dim pars(0) As AccesoDatos.Parametro
        '
        Dim sql As String = "SELECT * FROM t_puesto WHERE codigo_nivel = p_codigo AND eliminado = 0"
        pars(0) = New AccesoDatos.Parametro("p_codigo", p_codigo)
        '
        Try
            dr = g_access.ejecutarQuery(sql, pars)
        Catch ex As Exception
        End Try
        Return dr
    End Function

    ''' <summary>
    ''' Elimina un puesto
    ''' </summary>
    ''' <param name="p_codigo">Codigo del  puesto</param>
    ''' <remarks>Creado por: Manuel Chaves inicio:14/6/2010 mod:22/06/210</remarks>
    Public Shared Sub eliminar(ByVal p_codigo)
        Dim pars(0) As AccesoDatos.Parametro
        '
        Dim sql As String = "UPDATE t_puesto SET eliminado = 1 WHERE codigo = p_codigo"
        pars(0) = New AccesoDatos.Parametro("p_codigo", p_codigo)
        '
        Try
            g_access.ejecutarSQL(sql, pars)
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub

    ''' <summary>
    ''' Actualiza los datos de un puesto.
    ''' </summary>
    ''' <param name="p_codigo">Codigo</param>
    ''' <param name="p_descripcion">Descripcion</param>
    ''' <param name="p_nivel">Nivel</param>
    ''' <param name="p_nombre">Nombre</param>
    ''' <param name="p_salario">Salario</param>
    ''' <param name="p_tipoSalario">Tipo Salario</param>
    ''' <remarks>Creado por: Manuel Chaves inicio:14/6/2010 mod:22/06/210</remarks>
    Public Shared Sub actualizar(ByVal p_codigo As Integer, ByVal p_nombre As String, ByVal p_descripcion As String, _
                            ByVal p_nivel As Integer, ByVal p_tipoSalario As Integer, ByVal p_salario As Double)
        '
        Dim pars(5) As AccesoDatos.Parametro
        '
        Dim sql As String = "UPDATE t_puesto SET nombre = p_nombre, descripcion = p_descripcion, tipo_salario = p_tipo_salario, salario = p_salario, codigo_nivel = p_nivel WHERE codigo = p_codigo AND eliminado = 0"
        pars(0) = New AccesoDatos.Parametro("p_nombre", p_nombre)
        pars(1) = New AccesoDatos.Parametro("p_descripcion", p_descripcion)
        pars(2) = New AccesoDatos.Parametro("p_tipo_salario", p_tipoSalario)
        pars(3) = New AccesoDatos.Parametro("p_salario", p_salario)
        pars(4) = New AccesoDatos.Parametro("p_codigo", p_codigo)
        pars(5) = New AccesoDatos.Parametro("p_nivel", p_nivel)
        '
        Try
            g_access.ejecutarSQL(sql, pars)
        Catch ex As Exception
            MsgBox("MultiPuesto -> actualizar : " + ex.Message)
            Throw ex
        End Try
    End Sub
#End Region
End Class
